#Boa:Frame:Frame1

import wx
import consultasBD
import utiles
from decimal import Decimal

def create(parent):
    return Frame1(parent)

[wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1BUTTON2, wxID_FRAME1BUTTON3, 
 wxID_FRAME1CHECKBOX1, wxID_FRAME1CHECKBOX2, wxID_FRAME1COMBOBOX1, 
 wxID_FRAME1COMBOBOX2, wxID_FRAME1COMBOBOX3, wxID_FRAME1DATEPICKERCTRL1, 
 wxID_FRAME1DATEPICKERCTRL2, wxID_FRAME1PANEL1, wxID_FRAME1PANEL2, 
 wxID_FRAME1PANEL3, wxID_FRAME1RADIOBUTTON1, wxID_FRAME1RADIOBUTTON2, 
 wxID_FRAME1RADIOBUTTON3, wxID_FRAME1RADIOBUTTON4, wxID_FRAME1STATICTEXT1, 
 wxID_FRAME1STATICTEXT2, wxID_FRAME1STATICTEXT3, wxID_FRAME1STATICTEXT4, 
 wxID_FRAME1STATICTEXT5, wxID_FRAME1STATICTEXT6, wxID_FRAME1STATICTEXT7, 
 wxID_FRAME1STATICTEXT8, wxID_FRAME1TEXTCTRL1, wxID_FRAME1TEXTCTRL2, 
] = [wx.NewId() for _init_ctrls in range(28)]

class Frame1(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(553, 165), size=wx.Size(321, 356),
              style=wx.DEFAULT_FRAME_STYLE, title='Listado Ventas/Compras')
        self.SetClientSize(wx.Size(313, 329))

        self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
              pos=wx.Point(0, 0), size=wx.Size(313, 329),
              style=wx.TAB_TRAVERSAL)

        self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
              label='Sucursal', name='staticText1', parent=self.panel1,
              pos=wx.Point(24, 8), size=wx.Size(48, 13), style=0)
        self.staticText1.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_FRAME1COMBOBOX1,
              name='comboBox1', parent=self.panel1, pos=wx.Point(24, 24),
              size=wx.Size(200, 21), style=0, value='')
        self.comboBox1.SetLabel('')

        self.staticText3 = wx.StaticText(id=wxID_FRAME1STATICTEXT3,
              label='Periodo', name='staticText3', parent=self.panel1,
              pos=wx.Point(24, 168), size=wx.Size(43, 13), style=0)
        self.staticText3.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.staticText4 = wx.StaticText(id=wxID_FRAME1STATICTEXT4,
              label='Desde', name='staticText4', parent=self.panel1,
              pos=wx.Point(24, 184), size=wx.Size(30, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_FRAME1STATICTEXT5,
              label='Hasta', name='staticText5', parent=self.panel1,
              pos=wx.Point(128, 184), size=wx.Size(28, 13), style=0)

        self.panel2 = wx.Panel(id=wxID_FRAME1PANEL2, name='panel2',
              parent=self.panel1, pos=wx.Point(16, 48), size=wx.Size(200, 48),
              style=wx.TAB_TRAVERSAL)

        self.staticText2 = wx.StaticText(id=wxID_FRAME1STATICTEXT2,
              label='Informe ordenado por', name='staticText2',
              parent=self.panel2, pos=wx.Point(8, 8), size=wx.Size(125, 13),
              style=0)
        self.staticText2.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.radioButton1 = wx.RadioButton(id=wxID_FRAME1RADIOBUTTON1,
              label='Ventas', name='radioButton1', parent=self.panel2,
              pos=wx.Point(8, 32), size=wx.Size(81, 13), style=0)
        self.radioButton1.SetValue(True)
        self.radioButton1.Bind(wx.EVT_RADIOBUTTON,
              self.OnRadioButton1Radiobutton, id=wxID_FRAME1RADIOBUTTON1)

        self.radioButton2 = wx.RadioButton(id=wxID_FRAME1RADIOBUTTON2,
              label='Compras', name='radioButton2', parent=self.panel2,
              pos=wx.Point(112, 32), size=wx.Size(81, 13), style=0)
        self.radioButton2.SetValue(False)
        self.radioButton2.Bind(wx.EVT_RADIOBUTTON,
              self.OnRadioButton2Radiobutton, id=wxID_FRAME1RADIOBUTTON2)

        self.panel3 = wx.Panel(id=wxID_FRAME1PANEL3, name='panel3',
              parent=self.panel1, pos=wx.Point(24, 96), size=wx.Size(216, 24),
              style=wx.TAB_TRAVERSAL)

        self.textCtrl1 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL1, name='textCtrl1',
              parent=self.panel1, pos=wx.Point(24, 144), size=wx.Size(72, 21),
              style=0, value='')

        self.textCtrl2 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL2, name='textCtrl2',
              parent=self.panel1, pos=wx.Point(96, 144), size=wx.Size(124, 21),
              style=0, value='')
        self.textCtrl2.SetEditable(True)

        self.button3 = wx.Button(id=wxID_FRAME1BUTTON3, label='Buscar',
              name='button3', parent=self.panel1, pos=wx.Point(224, 144),
              size=wx.Size(75, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnBuscar, id=wxID_FRAME1BUTTON3)

        self.datePickerCtrl1 = wx.DatePickerCtrl(id=wxID_FRAME1DATEPICKERCTRL1,
              name='datePickerCtrl1', parent=self.panel1, pos=wx.Point(24, 200),
              size=wx.Size(96, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)

        self.datePickerCtrl2 = wx.DatePickerCtrl(id=wxID_FRAME1DATEPICKERCTRL2,
              name='datePickerCtrl2', parent=self.panel1, pos=wx.Point(128,
              200), size=wx.Size(96, 21),
              style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)

        self.comboBox2 = wx.ComboBox(choices=["20", "50", "100", "250", "500"],
              id=wxID_FRAME1COMBOBOX2, name='comboBox2', parent=self.panel1,
              pos=wx.Point(232, 200), size=wx.Size(56, 21), style=0,
              value='500')
        self.comboBox2.SetLabel('500')

        self.staticText7 = wx.StaticText(id=wxID_FRAME1STATICTEXT7, label='Top',
              name='staticText7', parent=self.panel1, pos=wx.Point(232, 184),
              size=wx.Size(21, 13), style=0)
        self.staticText7.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.checkBox1 = wx.CheckBox(id=wxID_FRAME1CHECKBOX1,
              label='Condensado global', name='checkBox1', parent=self.panel1,
              pos=wx.Point(24, 232), size=wx.Size(112, 13), style=0)
        self.checkBox1.SetValue(False)
        self.checkBox1.Bind(wx.EVT_CHECKBOX, self.OnCondensandoGlobal,
              id=wxID_FRAME1CHECKBOX1)

        self.staticText8 = wx.StaticText(id=wxID_FRAME1STATICTEXT8,
              label='Separador decimal', name='staticText8', parent=self.panel1,
              pos=wx.Point(168, 256), size=wx.Size(88, 13), style=0)
        self.staticText8.Enable(False)

        self.comboBox3 = wx.ComboBox(choices=[".", ","],
              id=wxID_FRAME1COMBOBOX3, name='comboBox3', parent=self.panel1,
              pos=wx.Point(264, 256), size=wx.Size(32, 21), style=0, value=',')
        self.comboBox3.SetLabel(',')
        self.comboBox3.Enable(False)

        self.checkBox2 = wx.CheckBox(id=wxID_FRAME1CHECKBOX2,
              label='Exportar planilla calculo', name='checkBox2',
              parent=self.panel1, pos=wx.Point(168, 232), size=wx.Size(136, 13),
              style=0)
        self.checkBox2.SetValue(False)
        self.checkBox2.Bind(wx.EVT_CHECKBOX, self.OnExportar,
              id=wxID_FRAME1CHECKBOX2)

        self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, label='Aceptar',
              name='button1', parent=self.panel1, pos=wx.Point(24, 288),
              size=wx.Size(104, 31), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnAceptar, id=wxID_FRAME1BUTTON1)

        self.button2 = wx.Button(id=wxID_FRAME1BUTTON2, label='Salir',
              name='button2', parent=self.panel1, pos=wx.Point(192, 288),
              size=wx.Size(104, 32), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnCancelar, id=wxID_FRAME1BUTTON2)

        self.radioButton3 = wx.RadioButton(id=wxID_FRAME1RADIOBUTTON3,
              label='$ (pesos)', name='radioButton3', parent=self.panel3,
              pos=wx.Point(0, 8), size=wx.Size(81, 13), style=0)
        self.radioButton3.SetValue(True)

        self.radioButton4 = wx.RadioButton(id=wxID_FRAME1RADIOBUTTON4,
              label='Items (unidades)', name='radioButton4', parent=self.panel3,
              pos=wx.Point(104, 8), size=wx.Size(112, 13), style=0)
        self.radioButton4.SetValue(False)

        self.staticText6 = wx.StaticText(id=wxID_FRAME1STATICTEXT6,
              label='Codigo Proveedor (busca 1 proveedor)', name='staticText6',
              parent=self.panel1, pos=wx.Point(24, 128), size=wx.Size(218, 13),
              style=0)
        self.staticText6.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

    def __init__(self, parent):
        utiles.crearDirectorio()
        self._init_ctrls(parent)
        self.cargarSucursal()
        self.titulo1 = ""
        self.titulo2 = ""
        self.resultado = ""
        self.conecta = True
        self.comboBox1.SetEditable(False)
        self.pie = "\nSin conexion con sucursales: "
        fechasExtremas = utiles.getDaysExtreme()
        primerDia = utiles.getDaysExtreme()[0]
        utiles.cargar_fecha(primerDia, self.datePickerCtrl1)
 
    def cargarSucursal(self):
        sucursal = utiles.getSucursalActiva()
        SQL = "SELECT nombre FROM sucursales WHERE codsucursal='%s'" % (sucursal)
        resultado = consultasBD.ordenCrudaDict(SQL)
        self.comboBox1.SetLabel(resultado[0]['nombre'])
        SQL = "SELECT nombre FROM sucursales"
        resultado = consultasBD.ordenCrudaDict(SQL)
        for i,item in enumerate(resultado):
            self.comboBox1.Append(item["nombre"])

    def OnCancelar(self, event):
        self.Close()

    def OnClickEnCondensado(self, event):
        if self.checkBox1.GetValue():
            self.comboBox1.Enable(False)
        else:
            self.comboBox1.Enable(True)

    def habilitacionInterfaz(self,habilitar=False):
        if not habilitar:
            self.comboBox1.Enable(False)
            self.comboBox2.Enable(False)
            self.comboBox3.Enable(False)
            self.button1.Enable(False)
            self.button2.Enable(False)
            self.checkBox1.Enable(False)
            self.datePickerCtrl1.Enable(False)
            self.datePickerCtrl2.Enable(False)
            self.radioButton1.Enable(False)
            self.radioButton2.Enable(False)
            self.radioButton3.Enable(False)
            self.radioButton4.Enable(False)
            self.button2.SetLabel("Procesando")
        else:
            self.comboBox1.Enable(True)
            self.comboBox2.Enable(True)
            self.comboBox3.Enable(True)
            self.button1.Enable(True)
            self.button2.Enable(True)
            self.checkBox1.Enable(True)
            self.checkBox1.SetValue(False)
            self.checkBox2.Enable(True)
            self.checkBox2.SetValue(False)
            self.staticText8.Enable(False)
            self.comboBox3.Enable(False)
            self.datePickerCtrl1.Enable(True)
            self.datePickerCtrl2.Enable(True)
            self.radioButton1.Enable(True)
            self.radioButton2.Enable(True)
            self.radioButton3.Enable(True)
            self.radioButton4.Enable(True)
            self.button2.SetLabel("Salir")
        self.button2.SetFocus()

    def OnRadioButton1Radiobutton(self, event):
        if self.radioButton1.GetValue():
            wx.Frame.SetTitle(self,"Listado Ventas/Compras")
            self.checkBox1.Enable(True)
        else:
            wx.Frame.SetTitle(self,"Listado Compras/Ventas")
            self.checkBox1.Enable(False)

    def OnRadioButton2Radiobutton(self, event):
        if self.checkBox1.GetValue():
            self.checkBox1.SetValue(False)
        self.OnRadioButton1Radiobutton(None)
            

    def OnExportar(self, event):
        if self.checkBox2.GetValue():
            self.staticText8.Enable(True)
            self.comboBox3.Enable(True)
        else:
            self.staticText8.Enable(False)
            self.comboBox3.Enable(False)

    def OnCondensandoGlobal(self, event):
        if self.checkBox1.GetValue():
            self.comboBox1.Enable(False)
        else:
            self.comboBox1.Enable(True)

    def OnAceptar(self, event):
        self.habilitacionInterfaz(False)

        #creamos tabla provisoria para guardar resultados
        sql = "DROP TABLE IF EXISTS listadoventascompras"
        consultasBD.ordenCruda(sql)
        r1 = "CREATE TABLE listadoventascompras (`id` INT( 5 ) NOT NULL AUTO_INCREMENT ,"
        r2 = "`codproveedor` INT( 20 ) NOT NULL , "
        r3 = "`nombre` VARCHAR( 50 ) NOT NULL , "
        r4 = "`itemvendidos` INT( 10 ) NOT NULL DEFAULT '0', "
        r5 = "`itemcomprados` INT( 10 ) NOT NULL DEFAULT '0', "
        r6 = "`valorvendido` DECIMAL( 20,2 ) NOT NULL DEFAULT '0.00' , "
        r7 = "`valorcomprado` DECIMAL( 20,2 ) NOT NULL DEFAULT '0.00', "
        r8 = "`sucursal` INT( 1 ) NOT NULL, PRIMARY KEY (  `id` )) ENGINE = INNODB"
        sql = r1+r2+r3+r4+r5+r6+r7+r8
        print "Creando tabla auxiliar"
        consultasBD.ordenCruda(sql)

        if not self.checkBox1.GetValue():
            self.procesaInforme()
        else:
            self.procesaInforme(True)

        if not self.checkBox2.GetValue():
            self.generarVista()
        else:
            self.generarListado()

        self.habilitacionInterfaz(True)

        print "Eliminando tabla auxiliar"
        sql = "DROP TABLE listadoventascompras"
        #consultasBD.ordenCruda(sql)
        
    def procesaInforme(self,total=False):
        sucursal = self.comboBox1.GetLabel()
        indice = self.comboBox1.GetSelection()
        if indice < 0: indice = 0

        fecha1 = str(self.datePickerCtrl1.GetLabel())
        fecha2 = str(self.datePickerCtrl2.GetLabel())
        fechaIni = str(fecha1)[6:]+"-"+str(fecha1)[3:5]+"-"+str(fecha1)[0:2]
        fechaFin = str(fecha2)[6:]+"-"+str(fecha2)[3:5]+"-"+str(fecha2)[0:2]
        limite = self.comboBox2.GetLabel()

        if self.radioButton1.GetValue():
            self.informeSegunVentas(total,sucursal,indice,fecha1,fecha2,fechaIni,fechaFin,limite)
        else:
            self.informeSegunCompras(total,sucursal,indice,fecha1,fecha2,fechaIni,fechaFin,limite)

    def informeSegunVentas(self,total,sucursal,indice,fecha1,fecha2,fechaIni,fechaFin,limite):
        #(ORDEN > VENTAS)
        periodo = " (ventas.fecha BETWEEN '"+fechaIni+"' AND '"+fechaFin+"')"
        top = " LIMIT 0,"+limite

        if not total:
            self.titulo2 = "SUCURSAL: "+sucursal
        else:
            self.titulo2 = "SUCURSAL: todas"

        if self.radioButton3.GetValue():
            orden = " ORDER BY p10.total DESC "
            self.titulo1 = "INFORME DE VENTAS (ordenado por $) - periodo "+fecha1+"-"+fecha2
        else:
            orden = " ORDER BY p10.item DESC "
            self.titulo1 = "INFORME DE VENTAS (ordenado por items) - periodo "+fecha1+"-"+fecha2

        print self.titulo1
        print self.titulo2

        #sql para procesar las ventas realizadas
        r0 =  "SELECT p10.proveedor,p10.nombre,p10.item,p10.total FROM \n"
        r1 =  " (SELECT proveedor,nombre,sum(item) as item,sum(total) as total FROM \n"
        r2 =  "  (SELECT p7.idventa,p7.ptc,p7.codsussan,p7.proveedor,p8.nombre,item,p7.preciolista,total FROM \n"
        r3 =  "   (SELECT p5.idventa,p5.ptc,p5.codsussan,p6.proveedor,p5.cantidad as item,p5.preciolista,p5.subtotal as total FROM \n"
        r4 =  "    (SELECT p3.idventa,p3.ptc,p4.codsussan,p3.cantidad,p3.preciolista,p3.subtotal FROM \n"
        r5 =  "     (SELECT p1.idventa,p2.ptc,p2.cantidad,p2.preciolista,(p2.preciolista*p2.cantidad) as subtotal FROM \n"
        r6 =  "      (SELECT idventa, nrofactura, fecha, idcliente FROM ventas \n"
        r7 =  "       WHERE "+periodo+") as p1,ventastieneproductos as p2 \n"
        r8 =  "      WHERE p1.idventa=p2.idticket) as p3,producto_talle_color as p4 \n"
        r9 =  "     WHERE p3.ptc=p4.id) as p5,productos as p6 \n"
        r10 = "    WHERE p5.codsussan=p6.codsussan) as p7,proveedor as p8 \n"
        r11 = "   WHERE p7.proveedor=p8.idproveedor) AS p9 \n"
        r12 = "  WHERE 1 GROUP BY proveedor) as p10 \n"
        r13 = "WHERE 1 "+orden
        consultaSQL = r0+r1+r2+r3+r4+r5+r6+r7+r8+r9+r10+r11+r12+r13+top

        if total:
            print "Procesando informe global"
            for indice in xrange(self.comboBox1.GetCount()):
                self.resultado,self.conecta = consultasBD.ordenCrudaRemota2(consultaSQL,indice)
                if not self.conecta:
                    self.pie = self.pie + str(indice)
                self.llenarResultados(self.resultado,indice+1)
            self.llenarCompras()
            print "Datos globales capturados"
        else:
            #captura de datos de UNA sucursal
            resultado,conecta = consultasBD.ordenCrudaRemota2(consultaSQL,indice)
            if not conecta:
                texto = "No conecta con sucursal:\n"+self.comboBox1.GetValue()
                utiles.mensaje(None,texto)
            else:
                self.llenarResultados(resultado,indice+1)
                self.llenarCompras()
                print "Datos procesados para la sucursal",sucursal

    def llenarCompras(self):
        #(ORDEN > VENTAS)
        fecha1 = str(self.datePickerCtrl1.GetLabel())
        fecha2 = str(self.datePickerCtrl2.GetLabel())
        fechaIni = str(fecha1)[6:]+"-"+str(fecha1)[3:5]+"-"+str(fecha1)[0:2]
        fechaFin = str(fecha2)[6:]+"-"+str(fecha2)[3:5]+"-"+str(fecha2)[0:2]

        #se procesan las compras realizadas a proveedores (ORDEN > VENTAS)
        consultaSQL = "SELECT DISTINCT codproveedor FROM listadoventascompras WHERE 1"
        resultado = consultasBD.ordenCruda(consultaSQL) 
        for item in resultado:
            codproveedor = str(item[0])
            codproveedor2 = str(int(codproveedor))

            #sql para procesar las compras realizadas
            r1 = "SELECT idproveedor,sum(cantprendas) as items,sum(total) as valor "
            r2 = "FROM compras as p1 \n"
            r3 = "WHERE idproveedor='"+codproveedor2+"' AND \n"
            r4 = "fechaingreso >= '"+fechaIni+" 00:00:00' AND fechaingreso <= '"+fechaFin+" 23:59:59' \n"
            r5 = "GROUP BY idproveedor \n"
            consultaSQL = r1+r2+r3+r4+r5

            r01 = "SELECT p1.idproveedor,(p1.ite-p2.ite) as items,(p1.val-p2.val) as valor "
            r02 = "FROM "
            r03 = "  (SELECT idproveedor,sum(cantprendas) as ite,sum(total) as val "
            r04 = "   FROM compras "
            r05 = "   WHERE idproveedor='"+codproveedor2+"' "
            r06 = "         AND fechaingreso >= '"+fechaIni+" 00:00:00' AND fechaingreso <= '"+fechaFin+"' " 
            r07 = "   GROUP BY idproveedor) AS p1, "
            r08 = "  (SELECT idProveedor,sum(cantProductos) as ite,sum(montoDevolucion) as val "
            r09 = "   FROM comprasdevoluciones "
            r10 = "   WHERE idProveedor=CAST('"+codproveedor+"' AS UNSIGNED) "
            r11 = "         AND fecha >= '"+fechaIni+" 00:00:00' AND fecha <= '"+fechaFin+" 23:59:59' " 
            r12 = "   GROUP BY idProveedor) AS p2 "
            r13 = "WHERE p1.idproveedor=p2.idProveedor "
            consultaSQL = r01+r02+r03+r04+r05+r06+r07+r08+r09+r10+r11+r12+r13

            dato = consultasBD.ordenCrudaDictRemota2(consultaSQL,0)
            if dato == () or dato == None:
                continue

            try:
                itemcomprado = str(dato[0]['items'])
            except:
                itemcomprado = "0.00"
            try:
                valorcomprado = str(Decimal(str(dato[0]['valor'])).quantize(Decimal('0.10')))
            except:
                valorcomprado = "0.00"
            
            tablaSQL = "listadoventascompras"
            camposSQL = "itemcomprados='"+itemcomprado+"',valorcomprado='"+valorcomprado+"'"
            condicionSQL = "codproveedor='"+codproveedor+"' AND sucursal='1'"
            id = consultasBD.executaUpdateSQL(None,tablaSQL,camposSQL,condicionSQL)
            
        print "Procesadas las compras"

## #------------------------------------------------------------------

    def llenarResultados(self,resultado,sucursal):
        #los dos tipos de informes usan esta funcion.
        if self.radioButton1.GetValue():
            #llena primero las ventas
            for item in resultado:
                proveedor = item[1]
                #hay proveedores que tienen ' o " en el nombre, con las siguientes
                #sentencias se reemplazan esos caracteres por espacio.
                proveedor = proveedor.replace("'"," ")
                proveedor = proveedor.replace('"',' ')
                valor = str(Decimal(str(item[3])).quantize(Decimal('0.10')))
                campos = " listadoventascompras(codproveedor,nombre,itemvendidos,valorvendido,sucursal) "
                valores = "('"+str(item[0])+"','"+proveedor+"','"+str(item[2])+"','"+valor+"','"+str(sucursal)+"')"
                consultasBD.executaInsertSQL(self,campos,valores)
        else:
            #llena primero las compras
            for item in resultado:
                proveedor = item[1]
                #hay proveedores que tienen ' o " en el nombre, con las siguientes
                #sentencias se reemplazan esos caracteres por espacio.
                proveedor = proveedor.replace("'"," ")
                proveedor = proveedor.replace('"',' ')
                valor = str(Decimal(str(item[3])).quantize(Decimal('0.10')))
                campos = "listadoventascompras(codproveedor,nombre,itemcomprados,valorcomprado,sucursal)"
                valores = "('"+str(item[0])+"','"+item[1]+"','"+str(item[2])+"','"+valor+"','"+str(sucursal)+"')"
                consultasBD.executaInsertSQL(self,campos,valores)

## #------------------------------------------------------------------

    def informeSegunCompras(self,total,sucursal,indice,fecha1,fecha2,fechaIni,fechaFin,limite):
        #(ORDEN > COMPRAS)
        periodo1 = " p1.fechaingreso >= '"+fechaIni+" 00:00:00' AND p1.fechaingreso <= '"+fechaFin+" 23:59:59' \n"
        periodo2 = " fecha >= '"+fechaIni+" 00:00:00' AND fecha <= '"+fechaFin+" 23:59:59' \n"
        top = " LIMIT 0,"+limite

        if not total:
            self.titulo2 = "SUCURSAL: "+sucursal
        else:
            self.titulo2 = "SUCURSAL: todas"

        if self.radioButton3.GetValue():
            orden = " ORDER BY valor DESC "
            self.titulo1 = "INFORME DE COMPRAS (ordenado por $) - periodo "+fecha1+"-"+fecha2
        else:
            orden = " ORDER BY items DESC "
            self.titulo1 = "INFORME DE COMPRAS (ordenado por items) - periodo "+fecha1+"-"+fecha2

        print self.titulo1
        print self.titulo2

        r00 = "SELECT p3.idproveedor,p3.nombre,(p3.ite-p4.ite) as items,(p3.val-p4.val) as valor "
        r01 = "FROM "
        r02 = "  (SELECT p1.idproveedor,p2.nombre,sum(p1.cantprendas) as ite,sum(p1.total) as val "
        r03 = "   FROM compras AS p1, proveedor AS p2 "
        r04 = "   WHERE "+periodo1+" AND p1.idproveedor=p2.idproveedor "
        r05 = "   GROUP BY p1.idproveedor) AS p3, "
        r06 = "  (SELECT idProveedor,sum(cantProductos) as ite,sum(montoDevolucion) as val "
        r07 = "   FROM comprasdevoluciones WHERE "+periodo2+" " 
        r08 = "   GROUP BY idProveedor) AS p4 "
        r09 = "WHERE p3.idproveedor=p4.idProveedor "+orden
        consultaSQL = r00+r01+r02+r03+r04+r05+r06+r07+r08+r09+top

        if total:
            return # NO SE PROCESA GLOBALES
            print "Procesando informe global"
##            for indice in xrange(self.comboBox1.GetCount()):
##                self.resultado,self.conecta = consultasBD.ordenCrudaRemota(consultaSQL,indice)
##                if not self.conecta: 
##                    self.pie = self.pie + str(indice)
##                #self.llenarResultados(self.resultado,indice+1)
            print "Datos globales capturados"
        else:
            #captura de datos de UNA sucursal
            resultado,conecta = consultasBD.ordenCrudaRemota(consultaSQL,indice)
            if not conecta:
                texto = "No conecta con sucursal:\n"+self.comboBox1.GetValue()
                utiles.mensaje(None,texto)
            else:
                self.llenarResultados(resultado,indice+1)
                self.llenarVentas(total,indice)
                print "Datos procesados para la sucursal",sucursal

    def llenarVentas(self,total,indice):
        #(ORDEN > COMPRAS)
        fecha1 = str(self.datePickerCtrl1.GetLabel())
        fecha2 = str(self.datePickerCtrl2.GetLabel())
        fechaIni = str(fecha1)[6:]+"-"+str(fecha1)[3:5]+"-"+str(fecha1)[0:2]
        fechaFin = str(fecha2)[6:]+"-"+str(fecha2)[3:5]+"-"+str(fecha2)[0:2]
        
        r01 = "SELECT p4.proveedor as codproveedor,sum(p2.cantidad) as items,sum(p2.preciofinal) as total \n"
        r02 = " FROM \n"
        r03 = "    ventas AS p1, \n"
        r04 = "    ventastieneproductos AS p2, \n"
        r05 = "    producto_talle_color AS p3, \n"
        r06 = "    productos AS p4 \n"
        r07 = " WHERE \n"
        r08 = "    p1.fecha BETWEEN '"+fechaIni+" 00:00:00' AND '"+fechaFin+" 23:59:59' \n"
        r09 = "    AND p1.nrofactura=p2.nrofactura \n"
        r10 = "    AND p2.ptc=p3.id \n"
        r11 = "    AND p3.codsussan=p4.codsussan \n"
        r12 = " GROUP BY p4.proveedor \n"
        consultaSQL = r01+r02+r03+r04+r05+r06+r07+r08+r09+r10+r11+r12

        if total:
            return # NO SE PROCESA GLOBALES
            print "Procesando informe global"
##            print "Datos globales capturados"
        else:
            #captura de datos de UNA sucursal
            print "Conectando con informacion de ventas"
            resultado,conecta = consultasBD.ordenCrudaRemota(consultaSQL,indice)
            if not conecta:
                texto = "No conecta con sucursal:\n"+self.comboBox1.GetValue()
                utiles.mensaje(None,texto)
            else:
                vendido = {}
                for item in resultado:
                    try:
                        codproveedor = int(item[0])
                    except:
                        codproveedor = 0
                    vendido[codproveedor]=(item[1],item[2])
                consultaSQL = "SELECT codproveedor FROM listadoventascompras WHERE 1"
                resultado = consultasBD.ordenCruda(consultaSQL)
                if resultado == () or resultado == None:
                    return
                for item in resultado:
                    codproveedor = item[0]
                    try:
                        itemvendidos = str(vendido[codproveedor][0])
                        valorvendido = str(vendido[codproveedor][1])
                    except:
                        continue
                    tablaSQL = "listadoventascompras"
                    camposSQL = "itemvendidos='"+itemvendidos+"',valorvendido='"+valorvendido+"'"
                    condicionSQL = "codproveedor='"+str(codproveedor)+"'"
                    id = consultasBD.executaUpdateSQL(None,tablaSQL,camposSQL,condicionSQL)

    def lecturaArchivos(self):
        r01 = "SELECT codproveedor,nombre,itemcomprados,valorcomprado,sum(itemvendidos),sum(valorvendido) \n"
        r02 = "FROM listadoventascompras WHERE 1 GROUP BY codproveedor \n"
        
        orden = ""
        if self.radioButton1.GetValue() and self.radioButton3.GetValue():
            orden = " ORDER BY sum(valorvendido) DESC "
        if self.radioButton1.GetValue() and self.radioButton4.GetValue():
            orden = " ORDER BY sum(itemvendidos) DESC "
        if self.radioButton2.GetValue() and self.radioButton3.GetValue():
            orden = " ORDER BY sum(valorcomprado) DESC "
        if self.radioButton2.GetValue() and self.radioButton4.GetValue():
            orden = " ORDER BY sum(itemcomprados) DESC "
        
        consultaSQL = r01+r02+orden
        resultado1 = consultasBD.ordenCruda(consultaSQL)
        
        r01 = "SELECT sum(itemvendidos),sum(valorvendido) "
        r02 = "FROM listadoventascompras "
        consultaSQL = r01+r02
        resultado2 = consultasBD.ordenCruda(consultaSQL)
        aux = ["","TOTALES"]
        for item in resultado2[0]:
            aux.append(item)

        r00 = "SELECT sum(p1.itemcomprados) as item,sum(p1.valorcomprado) as valor FROM "
        r01 = "(SELECT DISTINCT codproveedor,itemcomprados,valorcomprado "
        r02 = "FROM listadoventascompras) AS p1 "
        consultaSQL = r00+r01+r02
        resultado3 = consultasBD.ordenCrudaDict(consultaSQL)
        if resultado3 == () or resultado3 == None:
            aux = []
        else:
            aux2 = resultado3[0]
            aux.insert(2,aux2['valor'])
            aux.insert(2,aux2['item'])
        
        resultado = list(resultado1)
        resultado.append(aux)
        return resultado

    def generarVista(self):
        import Vista
        print "Generando vista"
        columnas = ["Codigo\nProveedor","Nombre","Items\nCompras","Pesos\nCompras","Items\nVentas","Pesos\nVentas"]
        nombre_vista = self.titulo1+" - "+self.titulo2
        alineacion = [0,0,2,2,2,2]
        resultado = self.lecturaArchivos()

        dlg = Vista.Vista(self, nombre_vista)
        dlg.cargar_celdas(resultado, columnas, alineacion)
        try:
            dlg.ShowModal()
        finally:
            dlg.Destroy()

    def ajusLong(self,cadena,longitud=40,izquierda=0):
        if izquierda == 0:
            while len(cadena) < longitud: cadena = cadena + " "
        else:
            while len(cadena) < longitud: cadena = " " + cadena
        return cadena
        
    def generarListado(self):

        resultado = self.lecturaArchivos()

        itemsPorColumna = len(self.resultado) / 3 + 1

        maximo = 0
        for item in self.resultado:
            if maximo < len(item[1]): maximo = len(item[1])
    
        columna = []
        columna0 = self.resultado[0:itemsPorColumna]
        columna1 = self.resultado[itemsPorColumna:itemsPorColumna*2]
        columna2 = self.resultado[itemsPorColumna*2:]
        columna.append(columna0)
        columna.append(columna1)
        columna.append(columna2)

        #abriendo archivo para recibir datos
        nameFile = "c:\\matrisamor.doc\\sussan-infoVentasCompras-"+utiles.getfechaInverseTime2()+".cvs"
        archivo = open(nameFile,"w")
        archivo.writelines(self.titulo1+"\n")
        archivo.writelines(self.titulo2+"\n")
        archivo.writelines("\n")
        archivo.writelines("Cod. Proveedor;Nombre;Items Comprados;Items Vendidos;Valor Comprado;Valor Vendido")
        archivo.writelines("\n")
        
        for item in resultado:

            codproveedor = str(item[0]).lstrip(" ")
            nombre       = item[1].rstrip(" ")
            itemcomprados= str(item[2]).lstrip(" ").replace(".",self.comboBox3.GetLabel())
            itemvendidos = str(item[3]).lstrip(" ").replace(".",self.comboBox3.GetLabel())
            valorcomprado= str(item[4]).lstrip(" ").replace(".",self.comboBox3.GetLabel())
            valorvendido = str(item[5]).lstrip(" ").replace(".",self.comboBox3.GetLabel())
            aux = codproveedor+";"+nombre+";"+itemcomprados+";"+itemvendidos+";"+valorcomprado+";"+valorvendido

            archivo.writelines(aux+"\n")

        if not self.conecta: archivo.writelines(self.pie)

        archivo.close()
        utiles.mensaje(None,"Informe finalizado en C:\\matrisamor.doc\\\n"+nameFile)

    def OnBuscar(self, event):
        if self.textCtrl1.GetValue() != "":
            consultaSQL = "SELECT nombre FROM proveedor WHERE idproveedor = '"+self.textCtrl1.GetValue()+"' "
            resultado = consultasBD.ordenCruda(consultaSQL)
            if resultado != ():
                nombre = resultado[0][0]
                self.textCtrl2.SetLabel(nombre)
                self.textCtrl1.SetFocus()
                return
            self.textCtrl1.SetLabel("")
        import BuscaProveedor2
        ventana = BuscaProveedor2.Dialog1(self,self.textCtrl2.GetValue())
        try:
            ventana.ShowModal()
            eleccion = ventana.getSeleccion()
        finally:
            ventana.Destroy()
        if eleccion.split(" / ") != ['']:
            self.textCtrl1.SetValue(eleccion.split(" / ")[1])
            self.textCtrl2.SetValue(eleccion.split(" / ")[0])
            self.datePickerCtrl1.SetFocus()
